<?php
// 检查.env文件是否存在
$envPath = __DIR__ . '/.env';

if (file_exists($envPath)) {
    // 检查文件权限
    if (!is_readable($envPath)) {
        // 获取当前用户和组信息
        $currentUser = function_exists('posix_geteuid') ? @posix_getpwuid(posix_geteuid()) : ['name' => 'unknown'];
        $fileOwner = function_exists('posix_getpwuid') ? @posix_getpwuid(fileowner($envPath)) : ['name' => 'unknown'];
        $fileGroup = function_exists('posix_getgrgid') ? @posix_getgrgid(filegroup($envPath)) : ['name' => 'unknown'];
        $permissions = substr(sprintf('%o', fileperms($envPath)), -4);

        // 创建详细的错误日志
        $logContent = "[" . date('Y-m-d H:i:s') . "] .env文件权限错误\n";
        $logContent .= "文件路径: $envPath\n";
        $logContent .= "文件权限: $permissions\n";
        $logContent .= "文件所有者: " . ($fileOwner['name'] ?? 'unknown') . "\n";
        $logContent .= "文件所属组: " . ($fileGroup['name'] ?? 'unknown') . "\n";
        $logContent .= "当前用户: " . ($currentUser['name'] ?? 'unknown') . "\n";

        // 提供更准确的修复建议
        $logContent .= "建议修复步骤:\n";
        $logContent .= "1. 通过SSH登录服务器\n";
        $logContent .= "2. 执行命令: chmod 640 $envPath\n";
        $logContent .= "3. 如果问题仍然存在，执行: chown {$currentUser['name']} $envPath\n";
        $logContent .= "4. 或者执行: chgrp {$fileGroup['name']} $envPath\n";

        file_put_contents('database_error.log', $logContent, FILE_APPEND);

        die("无法读取.env文件，请检查文件权限。错误详情已记录到database_error.log");
    }

    // 使用简单的解析方法
    $envContent = file_get_contents($envPath);
    $lines = preg_split('/\R/', $envContent); // \R 匹配任何换行符

    $envVars = [];
    foreach ($lines as $line) {
        $line = trim($line);

        // 跳过空行和注释行
        if (empty($line) || $line[0] === '#') {
            continue;
        }

        // 检查是否包含等号
        if (strpos($line, '=') !== false) {
            list($key, $value) = explode('=', $line, 2);
            $key = trim($key);
            $value = trim($value);

            // 移除值两端的引号（如果有）
            if (($value[0] === '"' && substr($value, -1) === '"') ||
                ($value[0] === "'" && substr($value, -1) === "'")) {
                $value = substr($value, 1, -1);
            }

            $envVars[$key] = $value;
        }
    }

    // 从解析结果获取数据库配置
    $host = $envVars['DB_HOST'] ?? '';
    $user = $envVars['DB_USER'] ?? '';
    $password = $envVars['DB_PASSWORD'] ?? '';
    $db_name = $envVars['DB_NAME'] ?? '';
} else {
    die("缺少.env配置文件，请创建包含数据库配置的.env文件");
}

// 验证配置是否完整
if (empty($host) || empty($user) || empty($db_name)) {
    // 创建错误日志
    $logContent = "[" . date('Y-m-d H:i:s') . "] 数据库配置错误\n";
    $logContent .= "DB_HOST: " . (empty($host) ? "未设置" : "已设置") . "\n";
    $logContent .= "DB_USER: " . (empty($user) ? "未设置" : "已设置") . "\n";
    $logContent .= "DB_NAME: " . (empty($db_name) ? "未设置" : "已设置") . "\n";
    $logContent .= "DB_PASSWORD: " . (empty($password) ? "未设置" : "已设置") . "\n";

    // 记录解析出的变量
    $logContent .= "\n解析出的变量:\n";
    foreach ($envVars as $key => $value) {
        $logContent .= $key . "=" . ($key === 'DB_PASSWORD' ? '*****' : $value) . "\n";
    }

    file_put_contents('database_error.log', $logContent, FILE_APPEND);

    die("数据库配置错误，请检查.env文件格式和内容。错误详情已记录到database_error.log");
}

// 创建连接
$conn = new mysqli($host, $user, $password, $db_name);

// 检查连接
if ($conn->connect_error) {
    // 记录连接错误日志
    $errorLog = "[" . date('Y-m-d H:i:s') . "] 数据库连接失败: " . $conn->connect_error . "\n";
    $errorLog .= "连接参数: host=$host, user=$user, dbname=$db_name\n";
    file_put_contents('database_error.log', $errorLog, FILE_APPEND);

    die("数据库连接失败，请检查配置。错误详情已记录到database_error.log");
}

// 设置字符集为utf8
$conn->set_charset("utf8");
?>